const util = require("../../utils/util");
const app = getApp()

Page({
  data:{
    choose:true
  },
  //这段代码是一个小程序中的事件处理函数，用于切换数据中`choose`属性的
  choose(){
    this.setData({
      choose:!this.data.choose
    })
  },
  onShow(){
    this.getTopBanner(); //请求顶部轮播图
    this.getZixun()//获取资讯
    setTimeout(() => {
      this.getLoveDetail()//获取表白消息
      this.getLoseDetail()//获取失物招领消息
    }, 2000);
  },
  //获取首页顶部轮播图
  //主要是从云数据库中获取指定条件的数据，然后更新小程序页面的视图渲染。
  /*这段代码主要是从云数据库中获取指定条件的数据，然后更新小程序页面的视图渲染。具体注释如下：

```
该函数使用了小程序提供的云开发能力，通过`wx.cloud.database()`访问云数据库，并使用`collection`方法指定了需要查询的集合（相当于关系型数据库中的表）。在查询时，通过`where`方法设置了筛选条件，只返回`isTop`属性为`true`的文档。最后，通过`get`方法发送请求并异步获取数据，响应结果在请求成功或者失败时会触发不同的回调函数。

需要注意的是，如果请求成功并返回了数据，会将数据中的所有字段都保存到`banner`属性中，在`setData`时需要确保该属性在页面的`data`对象中已经定义。判断返回数据长度是否大于0是为了防止数据不存在时出现异常。如果查询失败，会在控制台打印错误信息。 */
  getTopBanner() {// 从云数据库中获取置顶banner信息
    wx.cloud.database().collection("school_zixun").where({// 通过wx.cloud.database()获取小程序的云数据库
      isTop:true// 筛选条件为isTop=true
    }).get().then(res => { // 请求成功的回调函数
        console.log("首页banner成功", res.data)
        if (res.data && res.data.length > 0) {
          // 如果返回的数据存在，并且长度大于0，则将数据保存在页面中
          this.setData({
            banner: res.data
          })
        }
      }).catch(res => {// 请求失败的回调函数
        console.log("首页banner失败", res)
      })
  },
   //获取资讯
   /*这段代码和上一个非常相似，主要作用是从云数据库中获取指定条件的资讯列表，并更新小程序页面的视图渲染。

和上一个函数类似，该函数也使用了小程序提供的云开发能力，通过`wx.cloud.database()`访问云数据库，并使用`collection`方法指定了需要查询的集合。在查询时，通过`where`方法设置了筛选条件，只返回`isTop`属性为`false`的文档（即未被置顶的资讯）。最后，通过`get`方法发送请求并异步获取数据，响应结果在请求成功或者失败时会触发不同的回调函数。

如果查询成功并返回了数据，函数会将数据中的所有字段都保存到`zixunList`属性中，在`setData`时需要确保该属性在页面的`data`对象中已经定义。判断返回数据长度是否大于0是为了防止数据不存在时出现异常。如果查询失败，会在控制台打印错误信息。 */
// 从云数据库中获取非置顶资讯列表
   getZixun() {
    wx.cloud.database().collection("school_zixun").where({
      isTop:false// 筛选条件为isTop=false
    }).get().then(res => {// 请求成功的回调函数
        console.log("首页banner成功", res.data)
        if (res.data && res.data.length > 0) {
           // 如果返回的数据存在，并且长度大于0，则将数据保存在页面中
          this.setData({
            zixunList: res.data
          })
        }
      }).catch(res => {// 请求失败的回调函数
        console.log("首页banner失败", res)
      })
  },
  /*这段代码主要是定义了一个跳转页面的事件处理函数，用于用户点击某个元素后跳转到另一个页面。

该函数使用了小程序提供的`wx.navigateTo`方法，可以跳转到应用内的某个页面。其中`url`参数指定目标页面的路径，以及传递给目标页面的参数。在该函数中，通过`e.currentTarget.dataset.id`获取当前元素（即被点击的元素）上绑定的`id`属性值，并将其追加到目标页面的路径后面作为参数。在目标页面中，可以通过`options`对象获取该参数。

需要注意的是，这里使用了小程序提供的页面栈机制，在目标页面中可以通过`getCurrentPages()[getCurrentPages().length - 1]`获取到当前页面实例对象。 */
// 跳转到banner详情页
  toBannerDetail(e){
    wx.navigateTo({
      url: '/pages/index/bannerdetail/bannerdetail?id=' + e.currentTarget.dataset.id,// 传递参数id，并在目标页面通过options获取
    })
  },
  /*这段代码是一个小程序的事件处理函数，用于查询指定用户发布的失物招领信息并进行视图渲染。

该函数主要是通过`wx.cloud`使用小程序的云开发能力，查询该用户在云数据库中所发布的失物招领信息。在查询时通过`where`方法设置了筛选条件，只返回该用户发布的所有帖子；在获取到结果后，对其中的奖励列表和评论列表进行遍历和处理，最后将获取到的数据更新到页面数据中。

需要注意的是，该函数对应的小程序页面必须为已登录状态才可以调用，否则会直接返回。如果查询失败，会在控制台打印错误信息。 */
// 获取指定用户发布的失物招领信息
  getLoseDetail(){
    // 根据全局变量判断用户是否已经登录
    if(!app.globalData.userInfo){
      return// 如果没有登录，则直接返回
    }
    var that = this;
    // 查询该用户在云数据库中所发布的失物招领信息
    wx.cloud.database().collection('school_loses').where({
      _openid:app.globalData.userInfo._openid// 筛选条件为_openid=当前用户的openid
    }).get({
      success(res){ // 请求成功后的回调函数

        console.log(res)
        var action = res.data
        action.time = util.formatTime(new Date(action.time))
// 遍历招领信息中的奖励列表，判断当前用户是否领取过
        for(var l in action.prizeList){
          if(action.prizeList[l].openid = app.globalData.openid){
            action.isPrized = true// 如果领取过，则设置isPrized为true
          }
        }
// 将评论列表中的时间格式化
        for(var l in action.commentList){
          action.commentList[l].time = util.formatTime(new Date(action.commentList[l].time))
        }
// 将获取到的结果更新到页面数据中
        that.setData({
          loseAction: res.data
        })

      }
    })
  },
  //获取当前用户的校园表白详情
  //此函数用于获取当前用户的校园表白详情。首先判断用户是否登录，如果没有登录则直接返回；否则调用云数据库方法查询数据，并遍历点赞和评论列表进行格式化和处理，最后将获取到的数据设置为当前页面的数据。
  getLoveDetail(){// 判断用户是否登录
    if(!app.globalData.userInfo){
      return
    }
    var that = this;
    wx.cloud.database().collection('school_loves').where({// 调用云数据库方法查询数据
      _openid:app.globalData.userInfo._openid// 查询条件：匹配当前用户的openid
    }).get({
      success(res){

        console.log(res)// 在控制台输出获取到的数据
        var action = res.data
        action.time = util.formatTime(new Date(action.time))// 格式化时间戳为年月日时分秒格式
// 遍历点赞列表，判断当前用户是否已经点过赞
        for(var l in action.prizeList){
          if(action.prizeList[l].openid = app.globalData.openid){
            action.isPrized = true// 如果已经点过赞，设置isPrized为true
          }
        }
  // 遍历评论列表，将时间戳转换为年月日时分秒格式
        for(var l in action.commentList){
          action.commentList[l].time = util.formatTime(new Date(action.commentList[l].time))
        }
// 将获取到的数据设置为页面数据
        that.setData({
          loveAction: res.data
        })

      }
    })
  },

  //业务逻辑梳理：本段代码实现了三个函数，分别用于跳转至校园爱情详情页面、失物招领详情页面和跑腿服务页面。其中，toLoveDetail函数在跳转前会在控制台打印当前事件的id，以便后续处理；而toPaotui函数不需要传递任何参数，直接跳转即可。
  // 进入校园爱情详情页面
  toLoveDetail(event){
// 在控制台打印当前事件的id字段
    console.log(event.currentTarget.dataset.id)
 // 跳转至校园爱情详情页，带上当前事件的id参数
    wx.navigateTo({
      url: '/pages/detail/detail?id=' + event.currentTarget.dataset.id,
    })
  },
  // 进入失物招领详情页面
  toLoseDetail(event){
 // 在控制台打印当前事件的id字段
    console.log(event.currentTarget.dataset.id)
// 跳转至失物招领详情页，带上当前事件的id参数
    wx.navigateTo({
      url: '/pages/detail2/detail2?id=' + event.currentTarget.dataset.id,
    })
  },
  // 进入跑腿服务页面
  toPaotui(){
    wx.navigateTo({ // 跳转至跑腿服务页面
      url: '/pages/paotui/paotui',
    })
  }
})
